# 闭包
#函数嵌套
# def outter():
#     num1 = 10
#     def inner(num2):
#         #内部函数使用外部函数的变量
#         res = num1 + num2
#         print("计算结果为：",res)
#     #外部函数返回了内部函数
#     return inner
# #outter()(12)
#获取闭包对象
# fun = outter()
#执行闭包
# fun(12)

#闭包使用
# def mes_name(name):
#     def inner(msg):
#         print(name + ":" +msg)
#     return inner
# ZhangSan = mes_name("ZhangSan")
# LiSi = mes_name("LiSi")
# ZhangSan("明天去上课吗？")
# LiSi("不去")

#修改闭包函数内的外部函数变量

def outter():
    num1 = 10
    def inner(num2):
        nonlocal num1
        num1  = 20 
        #内部函数使用外部函数的变量
        res = num1 + num2
        print("计算结果为：",res)
    print("修改前num1的值",num1)
    inner(12)
    print("修改前num1的值",num1)
    #外部函数返回了内部函数
    return inner
outter()(12)